题目描述折半插入排序同样是一种非常简单的排序方法,它的基本操作是在一个已经排好序的有序表中进行查找和插入。不难发现这个查找的过程可以十分自然的修改成折半查找的方式进行实现。
折半插入排序的算法可以描述如下:
在本题中,读入一串整数,将其使用以上描述的折半插入排序的方法从小到大排序,并输出。
输入输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过1000。
第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。
输出只有1行,包含n个整数,表示从小到大排序完毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾输出换行。
#include<bits/stdc++.h>using namespace std;int a[1005];int main(){ int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int low,high,mid; for(int i=1;i<n;i++){ int ...
题目描述现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。
输入第一行只有一个整数m(m<=10),表示测试数据组数。接下来的m行,每行有一个字符串(长度不超过100)。
输出输出互换后的字符串,每组输出占一行。
#include<bits/stdc++.h>using namespace std;int main() { int n, i, j; cin >> n; string a; while (n–) { cin >> a; j = a.length(); for (i = 0; i < j; i++) { if (a[i] >= ‘a’ && a[i] <= ‘z’)a[i] = a[i] - 32; else a[i] += 32; ...
题目描述著名的哥德巴赫猜想可以陈述为:任何一个不小于6的偶数一定可以拆成两个质数的和。如6=3+3,8=5+3等,你的任务是将一个大于6的偶数n拆成两个最接近的质数p,q,满足p+q=n.
输入输入包含多组测试数据。每组数据包含1个偶数n(n在6到1000000之间包含边界)。
输出对于每组测试数据,输出两个质数p,q(p<=q)满足p+q=n。
#includeusing namespace std;int P[1000000]={0};
void Prime_list(){ P[0]=P[1]=1; for(int i=2;i<1000000;i++) { for(int j=i*2;j<1000000;j+=i) P[j]=1; }}
main(){ int n; int i,cache; Prime_list();
while(cin>>n)
{...
题目描述Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.
输入每行一个奇数N$(0< N < 30)$,输入0结束
输出输入一个奇数,输出一个幻方,顺序参照样板输出;数与数用一个空格分开;输出完以后加一个回车。
题解1234567891011121314151617181920212223242526272829303132333435363738#include<iostream>#include <cstring>using namespace std;int a[100][100];int n;void show() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << a[...
题目描述长度为n但是不含11的字符串(只含01构成)有多少?(允许有前导0)
输入一个正整数长度n(1<=n<=1000)
输出所有不含有11的字符串的总数由于数值很大,请输出对与1000000007取模的结果
#include<bits/stdc++.h>using namespace std;int main() { int n; cin >> n; long long a[1001][2]; memset(a, 0, sizeof(a)); a[1][0] = 1; a[1][1] = 1; for (int i = 2; i <= n; i++) { a[i][0] = (a[i - 1][0] + a[i - 1][1]) % 1000000007; a[i][1] = a[i - 1][0] % 1000000007; } cout << (a[...
题目描述计算区间$[a,b]$的所有质数个数$1 \le a \lt b\le 1000000$
输入两个整数 $a, b$
输出区间$[a,b]$的所有质数个数
样例输入11 10
样例输出14
题解123456789101112131415161718#include<iostream>using namespace std;int main() { int a, b; cin >> a >> b; int i, j; int count = 0; for (i = a; i <= b; i++) { for (j = 2; j < i; j++) { if (i % j == 0)break; } if (j == i) { count++; } } cout << count << end...
题目描述角谷猜想:日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。
输入任一正整数 n 范围[2,1000000]
输出演算的过程
#include <stdio.h>main(){ long long n; scanf(“%lld”,&n); while(n!=1) { if(n%2==0) { printf(“%lld/2=%lld\n”,n,n/2); n/=2; } else { printf(“%lld*3+1=%lld\n”,n,n*3+1); n=n*3+1; } ...
题目描述墙角堆着一些小木块,每一层都有相同大小类似正方体,如下图所示:
因为小木块建造得实在是太有规律了,你只要知道它的层数就可以计算所有小木块的数量了。 现在请你写个程序 给你一个层数mm,求出这个所有小木块的数量。
输入第一行是一个整数 N(N≤10)表示测试数据的组, 接下来的 N行 每行只有一个整数 m ,表示这个层数。
输出对应每个输入的层数有一个输出,表示这个小木块总数量,每个输出占一行
#include<stdio.h>
int a(int n){ n = (1+n)*n/2; return n;}
int main(){ int n; scanf(“%d”, &n); for (int i = n; i>=1; –i){ int m, sum=0; scanf(“%d”, &m); for (int b = m; b>=1; –b){ sum += a...